package com.roads.common.utils;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.regex.Pattern;

/**
 * @ClassName BoqUtils
 * @Description 清单工具类
 * @Author nhp
 * @Date 2021/11/23 0023 12:29
 * @Version 1.0.0
 **/
public class BoqUtils {

    /**
     * 清单编号表达式
     * 100 or 101-1-a or -a
     */
    public static final String BOQ_CODE_REG = "(^[1-9][0-9]+)|(^[1-9][0-9]*(-\\w+)+\\.?)|(^(-\\w+)+\\.?)";

    /**
     * 清单编号表达式 完整
     * 100 or 101-1-a
     */
    public static final String COMPLETE_BOQ_CODE_REG = "(^[1-9][0-9]+)|(^[1-9][0-9]*(-\\w+)+\\.?)";

    /**
     * 缺省编号表达式
     */
    public static final String BOQ_CODE_MISSING_REG = "^(-(\\w+))+\\.?";

    /**
     * 清单大类
     */
    public static final String[] BOQ_CODE_TYPE = {"100", "200", "300", "400", "500", "600", "700", "800", "900"};

    /**
     * 清单状态-正常 0
     */
    public static final int BOQ_STATUS_NORMAL = 0;

    /**
     * 清单状态-不完整 -1 单位、单价、数量、金额为空
     */
    public static final int BOQ_STATUS_INCOMPLETE = -1;

    /**
     * 清单状态-不完整
     */
    public static final String BOQ_STATUS_INCOMPLETE_TEXT = "数据不完整，请检查单位、数量、单价、金额";

    /**
     * 清单状态-缺省 -2 清单编号缺省
     */
    public static final int BOQ_STATUS_DEFECT = -2;

    /**
     * 清单状态-缺省 -2
     */
    public static final String BOQ_STATUS_DEFECT_TEXT = "清单编号缺省";

    /**
     * 清单状态-未找到父项清单 2
     */
    public static final int BOQ_STATUS_NO_PARENT = 2;

    /**
     * 清单状态-未找到父项清单
     */
    public static final String BOQ_STATUS_NO_PARENT_TEXT = "未找到父项清单";

    /**
     * 清单状态-重复清单编号 3
     */
    public static final int BOQ_STATUS_REPEAT_CODE = 3;
    /**
     * 清单状态-重复清单编号
     */
    public static final String BOQ_STATUS_REPEAT_CODE_TEXT = "重复清单编号";

    /**
     * 清单状态-初始化状态 6
     */
    public static final int BOQ_STATUS_INIT = 6;

    /**
     * 清单状态-初始化状态
     */
    public static final String BOQ_STATUS_INIT_TEXT = "初始化导入";

    /**
     * 校验清单编号格式是否正确
     *
     * @param boqCode 清单编号
     * @return 是否
     */
    public static boolean validateBoqCode(String boqCode) {
        return Pattern.matches(BOQ_CODE_REG, boqCode);
    }

    /**
     * 校验清单编号格式是否正确
     *
     * @param boqCode 清单编号
     * @return 是否
     */
    public static boolean validateCompleteBoqCode(String boqCode) {
        return Pattern.matches(COMPLETE_BOQ_CODE_REG, boqCode);
    }

    /**
     * 校验清单编号是否缺失
     *
     * @param boqCode 清单编号
     * @return 是否
     */
    public static boolean validateMissingBoqCode(String boqCode) {
        return Pattern.matches(BOQ_CODE_MISSING_REG, boqCode);
    }

    /**
     * 校验清单编号是否为大类
     *
     * @param boqCode 清单编号
     * @return 是否
     */
    public static boolean validateIsType(String boqCode) {
        return Arrays.asList(BOQ_CODE_TYPE).contains(boqCode);
    }

    /**
     * 验证清单数据的正确性
     * 单位不能为空
     * 数据量不能为空和0
     * 单价不能为空和0
     * 金额不能为空和0
     *
     * @param unit 单位
     * @param amount
     * @param price
     * @param total
     * @return 结果
     */
    public static boolean validateValue(String unit, BigDecimal amount, BigDecimal price, BigDecimal total) {
        if (StringUtils.isEmpty(unit)
                || !StringUtils.isDecimal(amount)
                || !StringUtils.isDecimal(price)
                || !StringUtils.isDecimal(total)) {
            return false;
        }
        return true;
    }

    public static void main(String[] args) {
        System.out.println(StringUtils.isDecimal(new BigDecimal(0)));
    }

}
